package com.youlu.campus.service.sms;

import com.alibaba.fastjson.JSON;
import com.youlu.campus.entity.dto.sms.SmsBaseInfoDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author : [dengbo]
 * @className : SmsServerService
 * @description : [描述说明该类的功能]
 * @createTime : [2022/5/11 12:28]
 */
@Service
@Slf4j
public class SmsServerService {

    @Autowired
    private VerifyCodeService verifyCodeService;

    @Autowired
    private TencentcloudService tencentcloudService;

    /**
     * 发送消息
     *
     * @param dto
     * @return
     */
    public Pair<Boolean, String> sendSmsMsg(SmsBaseInfoDTO dto) {
        log.info(":>>> 开始发送短信:{}",JSON.toJSON(dto));
        if (dto == null) {
            return Pair.of(false, "参数错误");
        }
        if (StringUtils.isAnyBlank(dto.getPhone(), dto.getTemplateId())) {
            return Pair.of(false, "手机号或者模版为空");
        }
        if (dto.getSmsType() == null) {
            return Pair.of(false, "消息类型错误");
        }
        boolean re;
        String verifyCode = "";
        if (SmsBaseInfoDTO.SmsType.SMS.equals(dto.getSmsType()) || SmsBaseInfoDTO.SmsType.SMS_TEM.equals(dto.getSmsType())) {
            if (StringUtils.isBlank(dto.getSignName())) {
                return Pair.of(false, "签名信息错误");
            }
            if (SmsBaseInfoDTO.SmsType.SMS.equals(dto.getSmsType())) {
                //获取验证码
                verifyCode = verifyCodeService.getRandNum(6);
                dto.setTemplateParamSet(new String[]{verifyCode});
            }
            re = tencentcloudService.sendSms(dto.getPhone(), dto.getSignName(), dto.getTemplateId(), ArrayUtils.nullToEmpty(dto.getTemplateParamSet()));
        } else if (SmsBaseInfoDTO.SmsType.VOICE.equals(dto.getSmsType()) || SmsBaseInfoDTO.SmsType.VOICE_TEM.equals(dto.getSmsType())) {
            if (SmsBaseInfoDTO.SmsType.VOICE.equals(dto.getSmsType())) {
                //获取验证码
                verifyCode = verifyCodeService.getRandNum(4);
                dto.setTemplateParamSet(new String[]{verifyCode});
            }
            re = tencentcloudService.sendVoice(dto.getPhone(), dto.getTemplateId(), ArrayUtils.nullToEmpty(dto.getTemplateParamSet()));
        } else {
            return Pair.of(false, "消息类型错误");
        }
        if (!re) {
            return Pair.of(false, "发送失败");
        }
        if (SmsBaseInfoDTO.SmsType.SMS.equals(dto.getSmsType()) || SmsBaseInfoDTO.SmsType.VOICE.equals(dto.getSmsType())) {
            // 保存验证码
            verifyCodeService.saveVerifyCode(dto.getPrefix(), dto.getPhone(), verifyCode);
        }
        return Pair.of(true, "");
    }

    /**
     * 校验验证码
     *
     * @param dto
     * @return
     */
    public Pair<Boolean, String> checkVerifyCode(SmsBaseInfoDTO dto) {
        return verifyCodeService.checkVerifyCode(dto.getPrefix(), dto.getPhone(), dto.getCode());
    }
}
